﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WebKit;
using Ivony.Html;
using Ivony.Html.Parser;
using WindowsFormsApp1.Mode;
using System.Net;
using System.IO;
using WindowsFormsApp1.Tool;

namespace WindowsFormsApp1
{
	public partial class Mercadolivre : Form
	{
		int isTrue = 0;
		WebKitBrowser browser = null;
		//	string url = "https://home.mercadolivre.com.br/informatica/";//电子类目
		string url = "https://www.mercadolivre.com.br/categories.html";//所有类别

		//string url = "https://www.baidu.com";
		List<string> categoryList = new List<string>();


		string []category = new string[]{ "车辆配件", "农业，工业和商业", "食品和饮料", "动物", "古董与艺术", "艺术和手工艺品", "婴儿", "美容及个人护理", "玩具和爱好", "鞋子，服装", "相机及配件", "汽车，摩托车及其他", "家居，家具和装饰", "电话＆电讯", "收藏与漫画", "家电", "音频和视频", "运动与健身", "工具与施工", "电影系列", "游戏", "房地产", "电脑计算机", "门票","乐器", "珠宝", "图书", "音乐", "健康", "服务", "其他" };

	//	private System.Windows.Forms.CheckedListBox checkedListBox1;

		public Mercadolivre()
		{
			//设置允许HTTPS
			Environment.SetEnvironmentVariable("WEBKIT_IGNORE_SSL_ERRORS", "1");
			InitializeComponent();
			browser = new WebKitBrowser();  
			browser.Dock = DockStyle.Fill;
			this.Controls.Add(browser);
			this.browser.NewWindowCreated += new WebKit.NewWindowCreatedEventHandler(this.webKitBrowser1_NewWindowCreated);



		//	this.checkedListBox1 = new System.Windows.Forms.CheckedListBox();

			for (int i = 0; i < category.Length; i++)
			{
				checkedListBox1.Items.Add(category[i]);
			}

			categoryList.Add("https://home.mercadolivre.com.br/veiculos-acessorios/");//车辆配件
			categoryList.Add("https://home.mercadolivre.com.br/agro-industria-comercio/");//农业，工业和商业
			categoryList.Add("https://home.mercadolivre.com.br/alimentos-bebidas/");//食品和饮料
			categoryList.Add("https://home.mercadolivre.com.br/animais/");//动物
			categoryList.Add("https://home.mercadolivre.com.br/antiguidades/");//古董与艺术
			categoryList.Add("https://home.mercadolivre.com.br/arte-artesanato/");//艺术和手工艺品
			categoryList.Add("https://home.mercadolivre.com.br/bebes/");//婴儿
			categoryList.Add("https://home.mercadolivre.com.br/beleza-cuidado-pessoal/");//美容及个人护理
			categoryList.Add("https://home.mercadolivre.com.br/brinquedos-hobbies/");//玩具和爱好
			categoryList.Add("https://www.mercadolivre.com.br/moda/");//鞋子，服装
			categoryList.Add("https://home.mercadolivre.com.br/cameras-e-accesorios/");//相机及配件
			categoryList.Add("https://www.mercadolivre.com.br/veiculos//");//不能选。汽车，摩托车及其他
			categoryList.Add("https://home.mercadolivre.com.br/moveis-decoracao//");//家居，家具和装饰
			categoryList.Add("https://home.mercadolivre.com.br/veiculos-acessorios/");//电话＆电讯
			categoryList.Add("https://home.mercadolivre.com.br/colecoes/");//收藏与漫画
			categoryList.Add("https://home.mercadolivre.com.br/eletrodomesticos/");//家电
			categoryList.Add("https://home.mercadolivre.com.br/eletronicos/");//音频和视频
			categoryList.Add("https://home.mercadolivre.com.br/esportes-fitness/");//运动与健身
			categoryList.Add("https://home.mercadolivre.com.br/ferramentas-construcao/");//工具与施工
			categoryList.Add("https://home.mercadolivre.com.br/filmes-seriados/");//电影系列
			categoryList.Add("https://home.mercadolivre.com.br/eletronicos-games/");//游戏
			categoryList.Add("https://www.mercadolivre.com.br/imoveis/");//不能选。房地产
			categoryList.Add("https://home.mercadolivre.com.br/informatica//");//电脑计算机
			categoryList.Add("https://home.mercadolivre.com.br/ingressos/");//门票
			categoryList.Add("https://home.mercadolivre.com.br/intrumentos-musicais/");//乐器
			categoryList.Add("https://home.mercadolivre.com.br/mais-categorias/");//珠宝
			categoryList.Add("https://home.mercadolivre.com.br/livros/");//图书
			categoryList.Add("https://home.mercadolivre.com.br/musica/");//音乐
			categoryList.Add("https://home.mercadolivre.com.br/saude/");//健康
			categoryList.Add("https://www.mercadolivre.com.br/servicos/");//服务
			categoryList.Add("https://home.mercadolivre.com.br/mais-categorias//");//其他
	

		}


		private void webKitBrowser1_NewWindowCreated(object sender, WebKit.NewWindowCreatedEventArgs e)
		{
			//初始化窗口
			e.WebKitBrowser.Navigating += new WebBrowserNavigatingEventHandler(WebKitBrowser_Navigating);
			e.WebKitBrowser.Location = new Point(2000, 2000);
			this.Controls.Add(e.WebKitBrowser);
		}
		void WebKitBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
		{
			//WebKitBrowser弹出的新链接地址
			string url = e.Url.ToString();
		}

		private void button1_Click(object sender, EventArgs e)
		{ 
			isTrue = 0;
			browser.Navigate(url);
			browser.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.webBrowser1_DocumentCompleted);
		}

		private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
			{
            
                var xmlStr = browser.DocumentText;
			// dateHtml(xmlStr, "Tecnologia", 48);//技术 电子产品 
			if (isTrue == 1)
			{

				dateHtmlALL(xmlStr, 48);//所有类目
			}
			else
			{
				dateHtml1(xmlStr, 48);//选择类目
			}

		}


		private JumonyParser jp = new JumonyParser();


		//解析HTML
		/// <summary>
		/// 获取全部
		/// </summary>
		/// <param name="html">整个HTML</param>
		/// <param name="index">每页多少条</param>
		public void dateHtmlALL(string html, int index)
		{

			//初始化对象
			Prouduct p = new Prouduct();

			var dataDocument = jp.Parse(html);
			var mumberlist = dataDocument.Find(".ch-box-lite.ch-rightcolumn.ch-clearfix").ToArray();//整体元素 

			try
			{

				for (int i = 0; i < mumberlist.Length; i++)
				{
					try
					{



						p = new Prouduct();
						var categoyWrapper = mumberlist[i].Find("div").ToArray();
						for (int j = 0; j < categoyWrapper.Length; j++)
						{

							var c1 = "";
							string c = "";
							//获取2级类名称
							var cateName = categoyWrapper[j].Find("span a").ToArray();
							for (int ti = 0; ti < cateName.Length; ti++)
							{

								c = cateName[ti].InnerText();//第二分类的名称
								c1 = cateName[ti].Attribute("href").Value();//跳转链接  


								//赋值

								var leimu1 = categoyWrapper[j].Find("h2 a").ToArray();
								string c3 = leimu1[0].InnerText();//大类目
								var c4 = leimu1[0].Attribute("href").Value();//大类目  
								p.CategoryClassID = c3;//1级类目 
								p.CreateTime = DateTime.Now;
								if (j > -1)
								{
									HelpObtain.tiao(c1, p, index);//获取商品信息
								}
							}
							/*获取3级类名称 
                            var categoyWrapperUL = categoyWrapper[i].Find("ul li a").ToArray();

                            for (int t = 0; t < categoyWrapperUL.Length; t++)
                            {

                                string ulc = categoyWrapperUL[0].InnerText();//第三分类的名称
                                var ulc1 = categoyWrapperUL[0].Attribute("href").Value();//跳转链接 
                                //p.Class1 = c;//2级类目
                                //p.Class2 = ulc;//3级类目

                            }*/

						}
					}
					catch
					{
						continue;
					}
				}

			}
			catch
			{
			}
		}
		//解析HTML
		/// <summary>
		/// 根据所有类别抓取
		/// </summary>
		/// <param name="html">整个HTML</param>
		/// <param name="leimu">什么类目</param>
		/// <param name="index">每页多少条</param>
		public void dateHtml1(string html, int index)
		{ 
			//初始化对象
			Prouduct p = new Prouduct(); 
			var dataDocument = jp.Parse(html);
			var mumberlist = dataDocument.Find(".ch-box-lite.ch-rightcolumn.ch-clearfix").ToArray();//整体元素  
			try
			{ 
				for (int i = 0; i < mumberlist.Length; i++)
				{
					try
					{
						p = new Prouduct();
						//获取选中的值
						var categoyWrapper = mumberlist[i].Find("div").ToArray();
						
							for (int t = 0; t < checkedListBox1.Items.Count; t++)
							{
								if (checkedListBox1.GetItemChecked(t))
								{
								string aUrl = categoryList[t];
								string aName = category[t];
								var c1 = "";
									string c = "";
									//获取2级类名称
									var cateName = categoyWrapper[t].Find("span a").ToArray();
									for (int ti = 0; ti < cateName.Length; ti++)
									{

										c = cateName[ti].InnerText();//第二分类的名称
										c1 = cateName[ti].Attribute("href").Value();//跳转链接   
																					//赋值 
										var leimu1 = categoyWrapper[t].Find("h2 a").ToArray();
										string c3 = leimu1[0].InnerText();//大类目
										var c4 = leimu1[0].Attribute("href").Value();//大类目  
										p.CategoryClassID = c3;//1级类目 
										p.CreateTime = DateTime.Now;
										HelpObtain.tiao(c1, p, index);//获取商品信息 
									} 
								} 
						}
					}
					catch
					{
						continue;
					}
				}

			}
			catch
			{
			}
		}




		//解析HTML
		/// <summary>
		/// 获取元素
		/// </summary>
		/// <param name="html">整个HTML</param>
		/// <param name="leimu">什么类目</param>
		/// <param name="index">每页多少条</param>
		public void dateHtml(string html,string leimu,int index)
		{
           
                //初始化对象
                Prouduct p = new Prouduct();

                var dataDocument = jp.Parse(html);
                var mumberlist = dataDocument.Find(".column").ToArray();//整体元素
                var groupList = mumberlist[0].Find(".group").ToArray();//一竖元素

            try
            {

                for (int i = 0; i < groupList.Length; i++)
                {
                    try
                    {

																							
                        p = new Prouduct();
                        var categoyWrapper = mumberlist[i].Find(".categories__wrapper").ToArray();
                        for (int j = 0; j < categoyWrapper.Length; j++)
                        {

                            //获取2级类名称
                            var cateName = categoyWrapper[j].Find("h2 a").ToArray();
                            string c = cateName[0].InnerText();//第二分类的名称
                            var c1 = cateName[0].Attribute("href").Value();//跳转链接  

                            //赋值
                            p.CategoryClassID = leimu;//1级类目 
                            p.CreateTime = DateTime.Now;
                            if (j > -1)
                            {
                                HelpObtain.tiao(c1, p, index);//获取商品信息
                            }

                            /*获取3级类名称 
                            var categoyWrapperUL = categoyWrapper[i].Find("ul li a").ToArray();

                            for (int t = 0; t < categoyWrapperUL.Length; t++)
                            {

                                string ulc = categoyWrapperUL[0].InnerText();//第三分类的名称
                                var ulc1 = categoyWrapperUL[0].Attribute("href").Value();//跳转链接 
                                //p.Class1 = c;//2级类目
                                //p.Class2 = ulc;//3级类目

                            }*/

                        }
                    }
                    catch
                    {
                        continue;
                    }
                }

            }
            catch 
            {
            }
        }

		private void button2_Click(object sender, EventArgs e)
		{

			isTrue = 1;
			browser.Navigate(url);
			browser.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.webBrowser1_DocumentCompleted);
		}

		private void button3_Click(object sender, EventArgs e)
		{
			MercadolivreData newform = new MercadolivreData();
			newform.ShowDialog();
		}

		private void button4_Click(object sender, EventArgs e)
		{
			try
			{

			Prouduct p = new Prouduct();
			p.CreateTime = DateTime.Now;
			p.CategoryClassID = "";//1级类目 
			string[] category = new string[] { "https://lista.mercadolivre.com.br/arte-artesanato/equipamento-tatuagens/", "https://lista.mercadolivre.com.br/arte-artesanato/livros/", "https://lista.mercadolivre.com.br/beleza-cuidado-pessoal/artigos-cabeleireiros/", "https://lista.mercadolivre.com.br/beleza-cuidado-pessoal/banho-higiene/", "https://lista.mercadolivre.com.br/beleza-cuidado-pessoal/barbearia/", "https://lista.mercadolivre.com.br/beleza-cuidado-pessoal/depilacao/", "https://lista.mercadolivre.com.br/beleza-cuidado-pessoal/eletrodomesticos-beleza/", "https://lista.mercadolivre.com.br/beleza-cuidado-pessoal/perucas-e-apliques/", "https://lista.mercadolivre.com.br/beleza-cuidado-pessoal/produtos-cabelo/", "https://lista.mercadolivre.com.br/brinquedos-hobbies/ar-livre-malabares-festas/", "https://lista.mercadolivre.com.br/brinquedos-hobbies/bonecas/", "https://lista.mercadolivre.com.br/brinquedos-hobbies/bonecos-figuras-acao/", "https://lista.mercadolivre.com.br/brinquedos-hobbies/brinquedos-controle-remoto/", "https://lista.mercadolivre.com.br/brinquedos-hobbies/lego-blocos-montar/", "https://lista.mercadolivre.com.br/brinquedos-hobbies/pelucias/", "https://roupas.mercadolivre.com.br/acessorios-moda/", "https://roupas.mercadolivre.com.br/bolsas/", "https://roupas.mercadolivre.com.br/malas-carteiras/", "https://roupas.mercadolivre.com.br/mochilas/", "https://roupas.mercadolivre.com.br/moda-fitness/", "https://roupas.mercadolivre.com.br/oculos/", "https://cameras.mercadolivre.com.br/acessorios/", "https://cameras.mercadolivre.com.br/equipamento-revelacao/", "https://cameras.mercadolivre.com.br/cameras/", "https://cameras.mercadolivre.com.br/filmadoras/", "https://lista.mercadolivre.com.br/casa-moveis-decoracao/banheiros/", "https://lista.mercadolivre.com.br/casa-moveis-decoracao/cozinha/", "https://lista.mercadolivre.com.br/casa-moveis-decoracao/decoracao/", "https://lista.mercadolivre.com.br/casa-moveis-decoracao/iluminacao-residencial/", "https://lista.mercadolivre.com.br/casa-moveis-decoracao/jardim/", "https://lista.mercadolivre.com.br/casa-moveis-decoracao/lavanderia/", "https://lista.mercadolivre.com.br/casa-moveis-decoracao/materiais-limpeza/", "https://lista.mercadolivre.com.br/casa-moveis-decoracao/sala-estar/", "https://lista.mercadolivre.com.br/casa-moveis-decoracao/moveis-escritorio/", "https://lista.mercadolivre.com.br/casa-moveis-decoracao/sala-jantar/", "https://lista.mercadolivre.com.br/casa-moveis-decoracao/quarto/", "https://lista.mercadolivre.com.br/casa-moveis-decoracao/seguranca-casa/", "https://colecoes.mercadolivre.com.br/albuns-figurinhas/", "https://colecoes.mercadolivre.com.br/canetas-lapis/", "https://colecoes.mercadolivre.com.br/bonecas-acessorios/", "https://colecoes.mercadolivre.com.br/cards-card-games/", "https://colecoes.mercadolivre.com.br/cedulas-moedas/", "https://colecoes.mercadolivre.com.br/espadas-artigos-militares/", "https://colecoes.mercadolivre.com.br/bonecos-figuras-acao/", "https://colecoes.mercadolivre.com.br/cartoes-postais/", "https://colecoes.mercadolivre.com.br/chaveiros/", "https://colecoes.mercadolivre.com.br/filatelia/", "https://lista.mercadolivre.com.br/eletrodomesticos/ar-e-ventilacao/", "https://lista.mercadolivre.com.br/eletrodomesticos/eletroportateis/", "https://eletronicos.mercadolivre.com.br/acessorios-audio-e-video/", "https://eletronicos.mercadolivre.com.br/audio-portatil/", "https://eletronicos.mercadolivre.com.br/calculadoras-e-agendas/", "https://eletronicos.mercadolivre.com.br/fones-ouvido/", "https://eletronicos.mercadolivre.com.br/audio-casa/", "https://eletronicos.mercadolivre.com.br/drones-acessorios/", "https://eletronicos.mercadolivre.com.br/gps/", "https://eletronicos.mercadolivre.com.br/mp3-mp4-mp5/", "https://eletronicos.mercadolivre.com.br/seguranca-casa/", "https://esportes.mercadolivre.com.br/artes-marciais-boxe/", "https://esportes.mercadolivre.com.br/equitacao/", "https://esportes.mercadolivre.com.br/fitness-musculacao/", "https://esportes.mercadolivre.com.br/golfe/", "https://esportes.mercadolivre.com.br/pesca/", "https://esportes.mercadolivre.com.br/tenis-squash/", "https://esportes.mercadolivre.com.br/badminton/", "https://esportes.mercadolivre.com.br/camping/", "https://esportes.mercadolivre.com.br/aquaticos/", "https://esportes.mercadolivre.com.br/futebol/", "https://esportes.mercadolivre.com.br/hockey/", "https://esportes.mercadolivre.com.br/protetores-esportivos/", "https://esportes.mercadolivre.com.br/tenis/", "https://esportes.mercadolivre.com.br/volei/", "https://esportes.mercadolivre.com.br/baseball/", "https://esportes.mercadolivre.com.br/ciclismo/", "https://esportes.mercadolivre.com.br/aventura-acao/", "https://esportes.mercadolivre.com.br/futebol-americano/", "https://esportes.mercadolivre.com.br/patins-skates/", "https://esportes.mercadolivre.com.br/rugby/", "https://esportes.mercadolivre.com.br/tenis-mesa/", "https://lista.mercadolivre.com.br/ferramentas-construcao/mobiliario-cozinhas/", "https://lista.mercadolivre.com.br/ferramentas-construcao/ferramentas/", "https://joias.mercadolivre.com.br/ferramentas/", "https://joias.mercadolivre.com.br/", "https://relogios.mercadolivre.com.br/monitores-cardiacos/", "https://joias.mercadolivre.com.br/pedras-preciosas/", "https://joias.mercadolivre.com.br/piercings/", "https://joias.mercadolivre.com.br/porta-joias/", "https://relogios.mercadolivre.com.br/", "https://lista.mercadolivre.com.br/saude/aparelhos-fisioterapia/", "https://lista.mercadolivre.com.br/saude/lentes-contato/", "https://lista.mercadolivre.com.br/saude/dental/", "https://lista.mercadolivre.com.br/saude/aromaterapia/", "https://lista.mercadolivre.com.br/saude/massagem/", "https://lista.mercadolivre.com.br/saude/suplementos-alimentares/", "https://lista.mercadolivre.com.br/mais-categorias/adultos/_PrCategId_AD", "https://lista.mercadolivre.com.br/mais-categorias/materiais-escolares/", "https://lista.mercadolivre.com.br/mais-categorias/artigos-armarinho/", "https://lista.mercadolivre.com.br/mais-categorias/esoterismo-ocultismo/" };
			for (int i = 0; i < category.Length; i++)
			{ 
				HelpObtain.tiao(category[i], p, 48);//获取商品信息
				}
			}
			catch (Exception E)
			{
				Debuglog(E.Message, "1.txt");
			}
		}
		private static object LockLog = new object();
		public static void Debuglog(string log, string logname = "_Debuglog.txt", string p = "1")
		{
			lock (LockLog)
			{
				try
				{
					System.IO.StreamWriter writer = System.IO.File.AppendText("D:\\log\\" + logname);
					writer.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + log + ",商品地址:" + p);
					writer.WriteLine("---------------");
					writer.Close();
				}
				catch (Exception E)
				{
					Debuglog(E.Message, "1层");
				}
			}
		}
	}
}


